﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;

namespace T4_Eind_programma
{
    public partial class BatchOverzicht : Form
    {
        #region Variable Declaration

        private BatchScherm mijnBatchScherm;
        private Order mijnOrder;

        #endregion Variable Declaration

        #region Constructor

        public BatchOverzicht(Order mijnOrder)
        {
            InitializeComponent();
            this.mijnOrder = mijnOrder;
            int nieuwnummer = 0;

            foreach (Mengbatch batch in mijnOrder.MengbatchList)// historie lijst ipv orderList
            {
                if (batch.Nummer >= nieuwnummer)
                {
                    nieuwnummer = batch.Nummer + 1;
                }
            }
            if (mijnOrder.MengbatchList.Count == 0)
            {
                InitializeToevoegen(nieuwnummer);
            }
            dataGridViewOrder.DataSource = mijnOrder.MengbatchList;
            mijnOrder.MengbatchList.ListChanged += mengbatchList_ListChanged;
            dataGridViewOrder.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dataGridViewOrder.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
        }

        #endregion Constructor

        #region Button Clicks

        private void btnDown_Click(object sender, EventArgs e)
        {
            if (dataGridViewOrder.SelectedRows.Count > 0 &&
                dataGridViewOrder.SelectedRows[0].Index != dataGridViewOrder.Rows[dataGridViewOrder.Rows.Count - 1].Index
     )
            {
                int huidigIndex = dataGridViewOrder.SelectedRows[0].Index;
                int nieuweIndex = huidigIndex + 1;
                Mengbatch tempMengbatch = mijnOrder.MengbatchList[huidigIndex];
                Mengbatch tempMengbatchNieuw = mijnOrder.MengbatchList[nieuweIndex];
                mijnOrder.MengbatchList[huidigIndex] = tempMengbatchNieuw;
                mijnOrder.MengbatchList[nieuweIndex] = tempMengbatch;
            }
        }

        private void btnToevoegen_Click(object sender, EventArgs e)
        {
            int nieuwnummer = 0;

            foreach (Mengbatch batch in mijnOrder.MengbatchList)// historie lijst ipv orderList
            {
                if (batch.Nummer >= nieuwnummer)
                {
                    nieuwnummer = batch.Nummer + 1;
                }
            }

            mijnBatchScherm = new BatchScherm(new Mengbatch(nieuwnummer, false));
            mijnBatchScherm.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosingToevoegen);
            this.Enabled = false;
            mijnBatchScherm.Show();
        }

        private void btnUp_Click(object sender, EventArgs e)
        {
            if (dataGridViewOrder.SelectedRows.Count > 0 &&
                dataGridViewOrder.SelectedRows[0].Index != dataGridViewOrder.Rows[0].Index
     )
            {
                int huidigIndex = dataGridViewOrder.SelectedRows[0].Index;
                int nieuweIndex = huidigIndex - 1;
                Mengbatch tempMengbatch = mijnOrder.MengbatchList[huidigIndex];
                Mengbatch tempMengbatchNieuw = mijnOrder.MengbatchList[nieuweIndex];
                mijnOrder.MengbatchList[huidigIndex] = tempMengbatchNieuw;
                mijnOrder.MengbatchList[nieuweIndex] = tempMengbatch;
            }
        }

        private void btnVerwijderen_Click(object sender, EventArgs e)
        {
            if (dataGridViewOrder.SelectedRows.Count == 1)
            {
                Mengbatch mengbatch = mijnOrder.MengbatchList.Where(orderItem => orderItem.Nummer == Convert.ToInt32(dataGridViewOrder.SelectedRows[0].Cells[0].Value)).First();
                mijnOrder.MengbatchList.Remove(mengbatch);
            }
        }

        private void btnWijzigen_Click(object sender, EventArgs e)
        {
            mijnBatchScherm = new BatchScherm(mijnOrder.MengbatchList[dataGridViewOrder.SelectedRows[0].Index]);
            mijnBatchScherm.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosingWijzigen);
            this.Enabled = false;
            mijnBatchScherm.Show();
        }

        private void ListViewItemDoubleClicked(object sender, EventArgs e)
        {
            Mengbatch mengbatch = mijnOrder.MengbatchList.Where
                (mengbatchItem => mengbatchItem.Nummer == Convert.ToInt32(dataGridViewOrder.SelectedRows[0].Cells[0].Value)).Single();
            VulbatchScherm mijnHistorieVulBatch = new VulbatchScherm(mengbatch);
            mijnHistorieVulBatch.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosingVulbatch);
            this.Enabled = false;
            mijnHistorieVulBatch.Show();
        }

        #endregion Button Clicks

        #region OnSearchClosing

        private void OnSearchClosingToevoegen(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (mijnBatchScherm.DialogResult == DialogResult.OK)
            {
                mijnBatchScherm.MijnMengbatch.GenereerProductcode(mijnOrder.Nummer);
                mijnBatchScherm.MijnMengbatch.GenereerVulbatchList();
                mijnOrder.MengbatchList.Add(mijnBatchScherm.MijnMengbatch);
            }
            this.Enabled = true;
        }

        private void OnSearchClosingVulbatch(object sender, System.ComponentModel.CancelEventArgs e)
        {
            this.Enabled = true;
        }

        private void OnSearchClosingWijzigen(object sender, System.ComponentModel.CancelEventArgs e)
        {
            mijnBatchScherm.MijnMengbatch.GenereerProductcode(mijnOrder.Nummer);
            mijnBatchScherm.MijnMengbatch.GenereerVulbatchList();
            this.Enabled = true;
        }

        #endregion OnSearchClosing

        private void BatchOverzicht_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (mijnBatchScherm != null && mijnBatchScherm.IsDisposed == false)
                mijnBatchScherm.Dispose();
        }

        private void InitializeToevoegen(int nummer)
        {
            mijnBatchScherm = new BatchScherm(new Mengbatch(nummer, false));
            mijnBatchScherm.Closing += new System.ComponentModel.CancelEventHandler(OnSearchClosingToevoegen);
            this.Enabled = false;
            mijnBatchScherm.Show();
        }

        private void mengbatchList_ListChanged(object sender, ListChangedEventArgs e)
        {
            dataGridViewOrder.DataSource = typeof(List<>);
            dataGridViewOrder.DataSource = mijnOrder.MengbatchList;
            dataGridViewOrder.AutoResizeColumns();
            dataGridViewOrder.Refresh();
        }
    }
}